﻿//#include <sys/wait.h>
//#include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <errno.h>
//int main(void)
//{
//	pid_t pid;
//	if ((pid = fork()) == -1)
//		perror("fork"), exit(1);
//	if (pid == 0) {
//		sleep(20);
//		exit(10);
//	}
//	else {
//		int st;
//		int ret = wait(&st);
//		if (ret > 0 && (st & 0X7F) == 0) { // 正常退出
//			printf("child exit code:%d\n", (st >> 8) & 0XFF);
//		}
//		else if (ret > 0) { // 异常退出
//			printf("sig code : %d\n", st & 0X7F);
//		}
//	}
//}
//
//
//
//int main()
//{
//	pid_t pid;
//	pid = fork();
//	if (pid < 0) {
//		printf("%s fork error\n", __FUNCTION__);
//		return 1;
//	}
//	else if (pid == 0) { //child
//		printf("child is run, pid is : %d\n", getpid());
//		sleep(5);
//		exit(257);
//	}
//	else {
//		int status = 0;
//		pid_t ret = waitpid(-1, &status, 0);//阻塞式等待，等待5S
//		printf("this is test for wait\n");
//		if (WIFEXITED(status) && ret == pid) {
//			printf("wait child 5s success, child return code is
//				: % d.\n",WEXITSTATUS(status));
//		}
//		else {
//			printf("wait child failed, return.\n");
//			return 1;
//		}
//	}
//	return 0;
//}
//
//
//
//
//#include <stdio.h>
//#include <stdlib.h>
//#include <sys/wait.h>
//#include <unistd.h>
//#include <vector>
//typedef void (*handler_t)(); // 函数指针类型
//std::vector<handler_t> handlers; // 函数指针数组
//void fun_one() {
//	printf("这是⼀个临时任务1\n");
//}
//void fun_two() {
//	printf("这是⼀个临时任务2\n");
//}
//void Load() {
//	handlers.push_back(fun_one);
//	handlers.push_back(fun_two);
//}
//void handler() {
//	if (handlers.empty())
//		Load();
//	for (auto iter : handlers)
//		iter();
//}
//int main() {
//	pid_t pid;
//	pid = fork();
//	if (pid < 0) {
//		printf("%s fork error\n", __FUNCTION__);
//		return 1;
//	}
//	else if (pid == 0) { // child
//		printf("child is run, pid is : %d\n", getpid());
//		sleep(5);
//		exit(1);
//	}
//	else {
//		int status = 0;
//		pid_t ret = 0;
//		do {
//			ret = waitpid(-1, &status, WNOHANG); // ⾮阻塞式等待
//			if (ret == 0) {
//				printf("child is running\n");
//			}
//			handler();
//		} while (ret == 0);
//		if (WIFEXITED(status) && ret == pid) {
//			printf("wait child 5s success, child return code is :%d.\n",
//				WEXITSTATUS(status));
//		}
//		else {
//			printf("wait child failed, return.\n");
//			return 1;
//		}
//	}
//	return 0;
//}
//
//
//
